<!-- HTML header for doxygen 1.9.1-->
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=9" />
    <meta name="generator" content="Doxygen 1.9.4" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>NumCpp: Release Notes</title>
    <link href="tabs.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="dynsections.js"></script>
    <link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
    <link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
    <link href="doxygen.css" rel="stylesheet" type="text/css" />
    <link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
<link href="doxygen-awesome-sidebar-only-darkmode-toggle.css" rel="stylesheet" type="text/css"/>
    <!-- ... other metadata & script includes ... -->
    <script type="text/javascript" src="../doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js"></script>
    <script type="text/javascript">
        DoxygenAwesomeDarkModeToggle.init()
    </script>
    <script type="text/javascript"
        src="../doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js"></script>
    <script type="text/javascript">
        DoxygenAwesomeFragmentCopyButton.init()
    </script>
    <script type="text/javascript" src="../doxygen-awesome-css/doxygen-awesome-paragraph-link.js"></script>
    <script type="text/javascript">
        DoxygenAwesomeParagraphLink.init()
    </script>
    <script type="text/javascript" src="../doxygen-awesome-css/doxygen-awesome-interactive-toc.js"></script>
    <script type="text/javascript">
        DoxygenAwesomeInteractiveToc.init()
    </script>
</head>
<body>
    <div id="top">
        <!-- do not remove this div, it is closed by doxygen! -->
        <div id="titlearea">
            <table cellspacing="0" cellpadding="0">
                <tbody>
                    <tr style="height: 56px;">
                        <td id="projectlogo"><img alt="Logo" src="NumCppLogoDoxygen.png" /></td>
                        <td id="projectalign" style="padding-left: 0.5em;">
                            <div id="projectname">NumCpp
                                &#160;<span id="projectnumber">2.12.1</span>
                            </div>
                            <div id="projectbrief">A Templatized Header Only C++ Implementation of the Python NumPy Library</div>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
        <!-- end header part --><!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('md__home_dpilger__github__num_cpp_docs_markdown__release_notes.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div><div class="header">
  <div class="headertitle"><div class="title">Release Notes </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1>Version 2.12.1</h1>
<ul>
<li>updated TRUE/FALSE enum fields to YES/NO to deconflict with other libraries terrible macro practice of #defining TRUE/FALSE</li>
</ul>
<h1>Version 2.12.0</h1>
<ul>
<li>added <code><a class="el" href="namespacenc.html#a99718b2914410e6c1166154122c6f314">searchsorted()</a></code> for <b>Issue #202</b> <a href="https://numpy.org/doc/stable/reference/generated/numpy.searchsorted.html">https://numpy.org/doc/stable/reference/generated/numpy.searchsorted.html</a></li>
<li>added <code>meanFilter</code> to <code>Filters</code></li>
<li>added <code>complementaryMeanFilter</code> to <code>Filters</code></li>
</ul>
<h1>Version 2.11.0</h1>
<ul>
<li>fixed Issue #191</li>
<li>fixed Issue #194</li>
<li>fixed Issue #196</li>
<li>added <code>rows</code> and <code>columns</code> methods to <code>NdArray</code></li>
<li>added <code>wrap</code> and <code>wrap2Pi</code> functions</li>
<li>added <code>normalize</code> function for <code>NdArray</code>s</li>
<li>added <code>Logger</code> and <code>BinaryLogger</code> classes for logging data</li>
<li>added <code>coordinates::Cartesian</code> class</li>
<li>added <code>coordinates::reference_frames</code> and <code>coordinates::transforms</code> namespaces for converting between various coordinate systems</li>
<li>various improvements and bug fixes</li>
</ul>
<h1>Version 2.10.1</h1>
<ul>
<li>fixed an error in installed cmake target when using <code>NUMCPP_NO_USE_BOOST</code></li>
</ul>
<h1>Version 2.10.0</h1>
<ul>
<li>added broadcasting for all <code>NdArray</code> operators for <b>Issue #147</b> and <b>Issue #174</b></li>
<li>added broadcasting for <code>minimum</code> and <code>maximum</code> functions for <b>Issue #74</b></li>
<li>added broadcasting for:<ul>
<li><code>fmin</code></li>
<li><code>fmax</code></li>
<li><code>fmod</code></li>
<li><code>hypot</code></li>
<li><code>logical_and</code></li>
<li><code>logical_or</code></li>
<li><code>logical_xor</code></li>
<li><code>remainder</code></li>
</ul>
</li>
<li>added <code>insert</code> function for <b>Issue #170</b> <a href="https://numpy.org/doc/stable/reference/generated/numpy.insert.html">https://numpy.org/doc/stable/reference/generated/numpy.insert.html</a></li>
<li>fixed <b>Issue #177</b>: slice and put with various integer index types</li>
<li>additional <code>NdArray</code> access operator overloads and <code>at</code> overloads</li>
<li>additional <code>put</code> overloads to <code>NdArray</code></li>
<li>added <code>dimSize</code> method to <code>NdArray</code></li>
<li>added <code>timeit</code> function</li>
<li>added overload of <code>hypot</code> for 3 <code>NdArray</code>s</li>
<li>various performance improvements and bug fixes</li>
</ul>
<h1>Version 2.9.0</h1>
<ul>
<li>dropped support of C++14 standard, now requires C++17 or greater</li>
<li>added a new <code>DateTime</code> class for working with date times</li>
<li>added <code>split</code> for <b>Issue #168</b> <a href="https://numpy.org/doc/stable/reference/generated/numpy.split.html">https://numpy.org/doc/stable/reference/generated/numpy.split.html</a></li>
<li>added <code>hsplit</code> for <b>Issue #168</b> <a href="https://numpy.org/doc/stable/reference/generated/numpy.hsplit.html">https://numpy.org/doc/stable/reference/generated/numpy.hsplit.html</a></li>
<li>added <code>vsplit</code> for <b>Issue #168</b> <a href="https://numpy.org/doc/stable/reference/generated/numpy.vsplit.html">https://numpy.org/doc/stable/reference/generated/numpy.vsplit.html</a></li>
<li>added <code>digitize</code> <a href="https://numpy.org/doc/stable/reference/generated/numpy.digitize.html">https://numpy.org/doc/stable/reference/generated/numpy.digitize.html</a></li>
<li>added <code>fromfunction</code> <a href="https://numpy.org/doc/stable/reference/generated/numpy.fromfunction.html">https://numpy.org/doc/stable/reference/generated/numpy.fromfunction.html</a></li>
<li>added <code>fromstring</code> <a href="https://numpy.org/doc/stable/reference/generated/numpy.fromstring.html">https://numpy.org/doc/stable/reference/generated/numpy.fromstring.html</a></li>
<li>added <code>logaddexp</code> <a href="https://numpy.org/doc/stable/reference/generated/numpy.logaddexp.html">https://numpy.org/doc/stable/reference/generated/numpy.logaddexp.html</a></li>
<li>added <code>logaddexp2</code> <a href="https://numpy.org/doc/stable/reference/generated/numpy.logaddexp2.html">https://numpy.org/doc/stable/reference/generated/numpy.logaddexp2.html</a></li>
<li>added <code>packbits</code> <a href="https://numpy.org/doc/stable/reference/generated/numpy.packbits.html">https://numpy.org/doc/stable/reference/generated/numpy.packbits.html</a></li>
<li>added <code>unpackbits</code> <a href="https://numpy.org/doc/stable/reference/generated/numpy.unpackbits.html">https://numpy.org/doc/stable/reference/generated/numpy.unpackbits.html</a></li>
<li>added <code>vander</code> <a href="https://numpy.org/doc/stable/reference/generated/numpy.vander.html">https://numpy.org/doc/stable/reference/generated/numpy.vander.html</a></li>
<li>added <code>rollRotation</code>, <code>pitchRotation</code>, and <code>yawRotation</code> methods to <code>Quaternion</code></li>
<li>added <code>NOMINMAX</code> compiler define to CMake target to deconflict with Windows builds</li>
</ul>
<h1>Version 2.8.0</h1>
<ul>
<li>fixed error in <code>inv</code> when a zero was on the diagnol for <b>Issue #132</b></li>
<li>fixed <b>Issue #140</b></li>
<li>added <code>bit_count</code>, Computes the number of 1-bits in the absolute value of the input</li>
<li>added <code>swapRows</code> and <code>swapCols</code> methods to <code>NdArray</code>, and also free functions</li>
<li>added <code>pinv</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.linalg.pinv.html">https://numpy.org/doc/stable/reference/generated/numpy.linalg.pinv.html</a></li>
<li>added <code>take</code> for <b>Issue #149</b>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.take.html">https://numpy.org/doc/stable/reference/generated/numpy.take.html</a></li>
<li>new non-global <code>random</code> interface</li>
<li>added ellipse metrics to <code>imageProcessing::Centroids</code></li>
<li>documentation updates</li>
<li>various minor performance improvements and bug fixes</li>
</ul>
<h1>Version 2.7.0</h1>
<ul>
<li>added <code>bartlett</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.bartlett.html">https://numpy.org/doc/stable/reference/generated/numpy.bartlett.html</a></li>
<li>added <code>blackman</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.blackman.html">https://numpy.org/doc/stable/reference/generated/numpy.blackman.html</a></li>
<li>added <code>corrcoef</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.corrcoef.html">https://numpy.org/doc/stable/reference/generated/numpy.corrcoef.html</a></li>
<li>added <code>cov</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.cov.html">https://numpy.org/doc/stable/reference/generated/numpy.cov.html</a></li>
<li>added <code>cov_inv</code>, the inverse covariance matrix, aka the concentration matrix</li>
<li>added <code>extract</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.extract.html">https://numpy.org/doc/stable/reference/generated/numpy.extract.html</a></li>
<li>added <code>geomspace</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.geomspace.html">https://numpy.org/doc/stable/reference/generated/numpy.geomspace.html</a></li>
<li>added <code>hamming</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.hamming.html">https://numpy.org/doc/stable/reference/generated/numpy.hamming.html</a></li>
<li>added <code>hanning</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.hanning.html">https://numpy.org/doc/stable/reference/generated/numpy.hanning.html</a></li>
<li>added <code>inner</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.inner.html">https://numpy.org/doc/stable/reference/generated/numpy.inner.html</a></li>
<li>added <code>isneginf</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.isneginf.html">https://numpy.org/doc/stable/reference/generated/numpy.isneginf.html</a></li>
<li>added <code>isposinf</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.isposinf.html">https://numpy.org/doc/stable/reference/generated/numpy.isposinf.html</a></li>
<li>added <code>kaiser</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.kaiser.html">https://numpy.org/doc/stable/reference/generated/numpy.kaiser.html</a></li>
<li>added <code>logb</code>, logarithm of with an arbitrary base b</li>
<li>added <code>logspace</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.logspace.html">https://numpy.org/doc/stable/reference/generated/numpy.logspace.html</a></li>
<li>added <code>nth_root</code>, the nth root of a value</li>
<li>added <code>place</code>, <a href="https://numpy.org/doc/stable/reference/generated/numpy.place.html">https://numpy.org/doc/stable/reference/generated/numpy.place.html</a></li>
<li>added <code>select</code> function, <a href="https://numpy.org/doc/stable/reference/generated/numpy.select.html">https://numpy.org/doc/stable/reference/generated/numpy.select.html</a></li>
<li><code>fmod</code> and the modulus <code>%</code> operator now work with float dtypes</li>
<li>added Hamming EDAC (Error Dectection and Correction) <code>encode</code> and <code>decode</code> functions, <a href="https://en.wikipedia.org/wiki/Hamming_code">https://en.wikipedia.org/wiki/Hamming_code</a></li>
<li>various minor performance improvements and bug fixes</li>
</ul>
<h1>Version 2.6.2</h1>
<ul>
<li><code>tofile</code> and <code>fromfile</code> will now work for generic struct dtypes</li>
</ul>
<h1>Version 2.6.1</h1>
<ul>
<li>Added more delimiter support to <code>fromfile</code> method</li>
</ul>
<h1>Version 2.6.0</h1>
<ul>
<li>Added <code>linalg::solve</code></li>
</ul>
<h1>Version 2.5.1</h1>
<ul>
<li>Made behavior of <code>interp</code> function consistent with <code>NumPy</code> when passing in non-sorted data</li>
</ul>
<h1>Version 2.5.0</h1>
<ul>
<li>Added additional <code>NdArray</code> slice overloads</li>
<li>Removed <code>NO_MULTITHREAD</code> compiler flag and replaced with <code>NUMCPP_USE_MULTITHREAD</code> so that single threaded is now the default</li>
<li>renamed <code>NO_USE_BOOST</code> compiler flag to <code>NUMCPP_NO_USE_BOOST</code></li>
<li>renamed <code>INCLUDE_BOOST_PYTHON_INTERFACE</code> compiler flat to <code>NUMCPP_INCLUDE_BOOST_PYTHON_INTERFACE</code></li>
<li>renamed <code>INCLUDE_PYBIND_PYTHON_INTERFACE</code> compiler flag to <code>NUMCPP_INCLUDE_PYBIND_PYTHON_INTERFACE</code></li>
</ul>
<h1>Version 2.4.2</h1>
<ul>
<li>Fixed a type error with <code>percentile</code> and <code>nanpercentile</code></li>
<li>Updated doxygen API css</li>
</ul>
<h1>Version 2.4.1</h1>
<ul>
<li>Fixed a build error for multiply defined symbols of <code>isLittleEndian</code></li>
</ul>
<h1>Version 2.4.0</h1>
<ul>
<li>Compile with <code>NO_USE_BOOST</code> definition to remove the Boost libraries as a dependency, with reduced functionality:<ul>
<li><code>gcd</code> with a pair of values (still available using a C++17 compliant compiler)</li>
<li><code>gcd</code> array</li>
<li><code>lcm</code> with a pair of values (still available using a C++17 compliant compiler)</li>
<li><code>lcm</code> array</li>
<li><code>polynomial::chebyshev_t</code></li>
<li><code>polynomial::chebyshev_u</code></li>
<li><code>polynomial::hermite</code> (still available using a C++17 compliant compiler)</li>
<li><code>polynomial::laguerre</code> (still available using a C++17 compliant compiler)</li>
<li><code>polynomial::legendre_p</code> (still available using a C++17 compliant compiler)</li>
<li><code>polynomial::legendre_q</code></li>
<li><code>polynomial::spherical_harmonic</code></li>
<li><code>random::beta</code></li>
<li><code>random::laplace</code></li>
<li><code>random::nonCentralChiSquared</code></li>
<li><code>random::triangle</code></li>
<li><code>random::uniformOnSphere</code></li>
<li><code>special::airy_ai</code></li>
<li><code>special::airy_ai_prime</code></li>
<li><code>special::airy_bi</code></li>
<li><code>special::airy_bi_prime</code></li>
<li><code>special::bernoulli</code></li>
<li><code>special::bessel_in</code> (still available using a C++17 compliant compiler)</li>
<li><code>special::bessel_in_prime</code></li>
<li><code>special::bessel_jn</code> (still available using a C++17 compliant compiler)</li>
<li><code>special::bessel_jn_prime</code></li>
<li><code>special::bessel_kn</code> (still available using a C++17 compliant compiler)</li>
<li><code>special::bessel_kn_prime</code></li>
<li><code>special::bessel_yn</code> (still available using a C++17 compliant compiler)</li>
<li><code>special::bessel_yn_prime</code></li>
<li><code>special::beta</code> (still available using a C++17 compliant compiler)</li>
<li><code>special::cyclic_hankel_1</code></li>
<li><code>special::cyclic_hankel_2</code></li>
<li><code>special::digamma</code></li>
<li><code>special::erf</code></li>
<li><code>special::erf_inv</code></li>
<li><code>special::erfc</code></li>
<li><code>special::erfc_inv</code></li>
<li><code>special::gamma</code></li>
<li><code>special::gamma1pm1</code></li>
<li><code>special::log_gamma</code></li>
<li><code>special::polygamma</code></li>
<li><code>special::prime</code></li>
<li><code>special::riemann_zeta</code> (still available using a C++17 compliant compiler)</li>
<li><code>special::spherical_bessel_jn</code> (still available using a C++17 compliant compiler)</li>
<li><code>special::spherical_bessel_yn</code> (still available using a C++17 compliant compiler)</li>
<li><code>special::spherical_hankel_1</code></li>
<li><code>special::spherical_hankel_2</code></li>
<li><code>special::trigamma</code></li>
</ul>
</li>
<li>Added <code>replace</code> option into <code>random::choice</code></li>
<li>Added <code>nan_to_num</code> function</li>
<li>Added complete and incomplete elliptical integrals of the first, second, and third kind to <code>special</code> namespace (requires either Boost or C++17 compliant compiler)</li>
<li>Added exponential integral to <code>special</code> namespace (requires either Boost or C++17 compliant compiler)</li>
<li>Added <code>NO_MULTITHREAD</code> compile definition to turn off algorithm multithreading from compliant compilers</li>
</ul>
<h1>Version 2.3.1</h1>
<ul>
<li>Added option for user defined bin edges in <code><a class="el" href="namespacenc.html#abcfc0394917cd12eae1bde686895e66d">histogram()</a></code> function</li>
</ul>
<h1>Version 2.3.0</h1>
<ul>
<li>Added slicing to <code>DataCube</code> class <br  />
</li>
</ul>
<h1>Version 2.2.0</h1>
<ul>
<li>Added additional <code><a class="el" href="namespacenc.html#a7a526300e6258fc6a008cfabc53d679c">where()</a></code> overloads to match NumPy functionality <br  />
</li>
</ul>
<h1>Version 2.1.0</h1>
<ul>
<li>Improved installation and usage with CMake find_package support</li>
<li>Various minor improvements</li>
</ul>
<h1>Version 2.0.0</h1>
<ul>
<li>Dropped support of C++11, now requires a C++14 or higher compiler</li>
<li>Added support for <code>std::complex&lt;T&gt;</code>, closing <b>Issue #58</b></li>
<li>Added more <code>NdArray</code> constructors for STL containers including <code>std::vector&lt;std::vector&lt;T&gt;&gt;</code>, closing <b>Issue #59</b></li>
<li>Added <code>polyfit</code> routine inline with Numpy <code>polyfit</code>, closing <b>Issue #61</b></li>
<li>Added ability to use <code>NdArray</code> as container for generic structs</li>
<li>Non-linear least squares fitting using Gauss-Newton</li>
<li>Root finding routines</li>
<li>Numerical integration routines</li>
<li><code>lu_decomposition</code> and <code>pivotLU_decomposition</code> added to <code>Linalg</code> namespace</li>
<li>New STL iterators added to <code>NdArray</code><ul>
<li><code>iterator</code></li>
<li><code>const_iterator</code></li>
<li><code>reverse_iterator</code></li>
<li><code>const_reverse_iterator</code></li>
<li><code>column_iterator</code></li>
<li><code>const_column_iterator</code></li>
<li><code>reverse_column_iterator</code></li>
<li><code>const_reverse_column_iterator</code></li>
</ul>
</li>
<li>Added <code>rodriguesRotation</code> and <code>wahbasProblem</code> to <code>Rotations</code> namespace</li>
<li>Various efficiency and/or bug fixes </li>
</ul>
</div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
  </ul>
</div>
</body>
</html>
